package org.telegram.bot.handle;

import org.telegram.telegrambots.meta.api.objects.ChatJoinRequest;
import org.telegram.telegrambots.meta.api.objects.Update;
import org.telegram.telegrambots.meta.api.objects.chat.Chat;

/**
 * 接口定义了处理不同类型 Telegram 消息的方法。
 *
 * @Author: wyx
 * @Date: 2023/5/27 11:59
 */
public interface IMessageHandle {

    /**
     * 处理普通消息。
     *
     * @param update 消息更新对象
     * @param chatId 聊天ID
     * @param botId 机器人ID
     */
    default void message(Update update, Long chatId, String botId) {};

    /**
     * 处理编辑后的消息。
     *
     * @param update 消息更新对象
     * @param chatId 聊天ID
     * @param botId 机器人ID
     */
    default void editedMessage(Update update, Long chatId, String botId) {};

    /**
     * 处理用户离开聊天。
     *
     * @param update 消息更新对象
     * @param chatId 聊天ID
     * @param botId 机器人ID
     */
    default void leftChat(Update update, Long chatId, String botId) {};

    /**
     * 处理新加入的成员。
     *
     * @param update 消息更新对象
     * @param chatId 聊天ID
     * @param botId 机器人ID
     */
    default void newChatMembers(Update update, Long chatId, String botId) {};

    /**
     * 处理转发的消息。
     *
     * @param update 消息更新对象
     * @param chatId 聊天ID
     * @param botId 机器人ID
     */
    default void forwardFromChat(Update update, Long chatId, String botId) {};

    /**
     * 处理机器人加入群组。
     *
     * @param update 消息更新对象
     * @param chatId 聊天ID
     * @param botId 机器人ID
     */
    default void botJoinGroup(Update update, Long chatId, String botId) {};

    /**
     * 处理机器人离开群组。
     *
     * @param update 消息更新对象
     * @param chatId 聊天ID
     * @param botId 机器人ID
     */
    default void botLeftGroup(Update update, Long chatId, String botId) {};

    /**
     * 处理机器人被添加为管理员。
     *
     * @param update 消息更新对象
     * @param chatId 聊天ID
     * @param botId 机器人ID
     */
    default void botAddAdmin(Update update, Long chatId, String botId) {};

    /**
     * 处理机器人命令。
     *
     * @param update 消息更新对象
     * @param chatId 聊天ID
     * @param botId 机器人ID
     */
    default void botCommand(Update update, Long chatId, String botId) {};

    /**
     * 处理群组类型变更。
     *
     * @param update 消息更新对象
     * @param chat 聊天对象
     * @param botId 机器人ID
     */
    default void groupTypeChange(Update update, Long chat, String botId) {};

    /**
     * 处理加入请求。
     *
     * @param chatJoinRequest 加入请求对象
     * @param botId 机器人ID
     */
    default void chatJoinRequest(ChatJoinRequest chatJoinRequest, String botId) {};

    /**
     * 处理机器人取消管理员。
     *
     * @param update 消息更新对象
     * @param id 聊天ID
     * @param botUsername 机器人用户名
     */
    default void botCancelAdmin(Update update, Long id, String botUsername) {};

    /**
     * 处理群组升级为超级群组。
     *
     * @param chat 聊天对象
     * @param groupChatId 普通群组ID
     * @param superGroupChatId 超级群组ID
     * @param botId 机器人ID
     */
    default void groupToSuperGroup(Chat chat, Long groupChatId, Long superGroupChatId, String botId) {};
}
